From: Cosimo Cecchi Date: Mon, 27 Jun 2011 16:13:54 +0000 (-0400) Subject: automount: handle the drive-eject-button signal X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~8060 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=b4f5e4206d349795d8b7301d2c11863bf4e0f1ee;p=gnome-shell.git automount: handle the drive-eject-button signal The implementation is untested, as the signal is not emitted from the Gdu GVfs volume monitor yet. https://bugzilla.gnome.org/show_bug.cgi?id=653520 --- diff --git a/js/ui/automountManager.js b/js/ui/automountManager.js index a34a28f35..7afb5515a 100644 --- a/js/ui/automountManager.js +++ b/js/ui/automountManager.js @@ -104,6 +104,9 @@ AutomountManager.prototype = { this._volumeMonitor.connect('drive-disconnected', Lang.bind(this, this._onDriveDisconnected)); + this._volumeMonitor.connect('drive-eject-button', + Lang.bind(this, + this._onDriveEjectButton)); Mainloop.idle_add(Lang.bind(this, this._startupMountAll)); }, @@ -153,6 +156,37 @@ AutomountManager.prototype = { global.play_theme_sound(0, 'device-removed-media'); }, + _onDriveEjectButton: function(monitor, drive) { + // TODO: this code path is not tested, as the GVfs volume monitor + // doesn't emit this signal just yet. + if (!this.ckListener.sessionActive) + return; + + // we force stop/eject in this case, so we don't have to pass a + // mount operation object + if (drive.can_stop()) { + drive.stop + (Gio.MountUnmountFlags.FORCE, null, null, + Lang.bind(this, function(drive, res) { + try { + drive.stop_finish(res); + } catch (e) { + log("Unable to stop the drive after drive-eject-button " + e.toString()); + } + })); + } else if (drive.can_eject()) { + drive.eject_with_operation + (Gio.MountUnmountFlags.FORCE, null, null, + Lang.bind(this, function(drive, res) { + try { + drive.eject_with_operation_finish(res); + } catch (e) { + log("Unable to eject the drive after drive-eject-button " + e.toString()); + } + })); + } + }, + _onVolumeAdded: function(monitor, volume) { this._checkAndMountVolume(volume); },